<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Class的静态方法</title>
</head>
<body>
    <h1>Class的静态方法</h1>
    <h2>在一个方法前，加上static关键字，就表示该方法不会被实例继承，而是直接通过类来调用</h2>

    <script>
        // 基本用法
        class Foo {
            static classMethod() {
                return 'hello';
            }
        }

        console.log(Foo.classMethod()); // 'hello'

        const foo = new Foo();
        // foo.classMethod(); // TypeError: foo.classMethod is not a function

        // 静态方法中的this指向类本身
        class Bar {
            static bar() {
                this.baz();
            }
            static baz() {
                console.log('hello');
            }
            baz() {
                console.log('world');
            }
        }

        Bar.bar(); // hello

        // 父类的静态方法可以被子类继承
        class Parent {
            static hello() {
                console.log('hello from parent');
            }
        }

        class Child extends Parent {}

        Child.hello(); // hello from parent

        // 静态方法也可以从super对象上调用
        class Child2 extends Parent {
            static hello() {
                super.hello();
                console.log('hello from child');
            }
        }

        Child2.hello();
        // hello from parent
        // hello from child
    </script>
</body>
</html> 